/*
    Estado          Metodo
    SP           listarUsuarios - Diego
    SP           insertarUsuario - Diego
    SP           modificarUsuario - Diego
    SP           eliminarUsuario - Diego
    SP           obtenerDatosUsuarios - Diego
 */

package gestores.administracion;

import dal.UsuarioDAL;

import excepciones.AvwException;

import java.util.ArrayList;

import java.util.HashMap;

import negocio.UsuarioWeb;
import util.Email;

public class GestorUsuario {
    /**
     * Lista los usuarios con los siguientes datos para cada usuario: 
     * uswCodigo, uswNombre, uswNombreUsuario y uswEmail.
     * @return ArrayList<HashMap>
     * */
    public static ArrayList<HashMap> listarUsuarios() throws AvwException, NullPointerException {
        ArrayList<HashMap> usuarios = new ArrayList<HashMap>();

        for (UsuarioWeb usuario: UsuarioDAL.listarUsuarios()) {
            HashMap hash = new HashMap();

            hash.put("uswCodigo", usuario.getUswCodigo());
            hash.put("uswNombre", usuario.getUswNombre());
            hash.put("uswNombreUsuario", usuario.getUswNombreUsuario());
            hash.put("uswEmail", usuario.getUswEmail());
            hash.put("uswContrasenia", usuario.getUswContrasenia());

            usuarios.add(hash);
        }

        return usuarios;
    }

    /**
     * @param String uswCodigo. //NO SE PASA EL CODIGO DE USUARIO, ES AUTOCALCULADO
     * @param String uswNombre.
     * @param String uswNombreUsuario.
     * @param String contrasenia.
     * @param String uswEmail.
     * */
    public static void insertarUsuario(String uswNombre, 
                                       String uswNombreUsuario, 
                                       String contrasenia, 
                                       String uswEmail) throws AvwException {
        UsuarioWeb usuarioWeb = new UsuarioWeb();
        usuarioWeb.setUswNombre(uswNombre);
        usuarioWeb.setUswNombreUsuario(uswNombreUsuario);
        usuarioWeb.setUswContrasenia(contrasenia);
        usuarioWeb.setUswEmail(uswEmail);

        try{
            UsuarioDAL.existeUsuarioPorNombreUsuario(usuarioWeb);
            //Si existe hacerlo saber con una excepcion
                throw new AvwException("Ya existe usuario", true);
        } catch (AvwException e){
            UsuarioDAL.insertarUsuario(usuarioWeb);
        }
    }

    /**
     * @param String uswCodigo.
     * @param String uswNombre.
     * @param String uswNombreUsuario.
     * @param String contrasenia.
     * @param String uswEmail.
     **/
    public static void modificarUsuario(String uswCodigo, String uswNombre, 
                                       String uswNombreUsuario, 
                                       String contrasenia, 
                                       String uswEmail) throws AvwException {
        UsuarioWeb usuarioWeb = new UsuarioWeb(uswCodigo);
        usuarioWeb.setUswNombre(uswNombre);
        usuarioWeb.setUswNombreUsuario(uswNombreUsuario);
        usuarioWeb.setUswContrasenia(contrasenia);
        usuarioWeb.setUswEmail(uswEmail);


            UsuarioDAL.modificarUsuario(usuarioWeb);

    }

    /**
     * @param String uswCodigo.
     **/
    public static void eliminarUsuario(String uswCodigo) throws AvwException {
        UsuarioWeb usuarioWeb = new UsuarioWeb(uswCodigo);

            UsuarioDAL.eliminarUsuario(usuarioWeb);

    }

    /**
     * Obtiene los siguientes datos del usuario cuyo codigo se pasa por 
     * parametro: uswCodigo, uswNombre, uswNombreUsuario y uswEmail.
     * @return HashMap.
     * @param String uswCodigo.
     **/
    public static HashMap obtenerDatosUsuarios(String uswCodigo) throws AvwException, NullPointerException {
        UsuarioWeb usuarioWeb = UsuarioDAL.obtenerUsuario(new UsuarioWeb(uswCodigo));
        HashMap usuarioHash = new HashMap();
        usuarioHash.put("uswCodigo",usuarioWeb.getUswNombre());
        usuarioHash.put("uswNombre",usuarioWeb.getUswNombre());
        usuarioHash.put("uswNombreUsuario",usuarioWeb.getUswNombreUsuario());
        usuarioHash.put("uswEmail",usuarioWeb.getUswEmail());
        
        return usuarioHash;
    }
}
